package com.bsj.power.common.util;

import com.alibaba.fastjson.JSON;
import com.bsj.power.common.config.rocketmq.producer.BaseMqPushUtil;
import com.bsj.power.common.constant.MqTopicAndTagConstants;
import com.bsj.power.common.def.entity.alarmReport.AlarmReport;
import com.bsj.power.common.def.enums.FileTypeEnum;
import com.bsj.power.common.def.mq.sdk.SdkAnnex;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Description
 * @Author zhaoyang
 * @Date 2024/8/24 17:00
 */
public class FileCreateUtil {

    /**
     * 报警附件创建
     * @param beginTime
     * @param cameraIds
     * @param path
     * @param baseMqPushUtil
     * @param alarmReport
     * @param sendFlag
     */
    public static void addAnnexFileAdd(Date beginTime, List<Long> cameraIds, String path,
                                     BaseMqPushUtil baseMqPushUtil, AlarmReport alarmReport,
                                     boolean sendFlag) {
        long first = beginTime.getTime() - 30000;
        String firstHalfMinute = DateUtils.dateToStr(new Date(first));
        String endMinute = DateUtils.dateToStr(beginTime);
        List<String> pathList = new ArrayList<>();
        cameraIds.stream().forEach(item -> {
            //采用异步创建报警附件的方式
            String filePath = filePath(beginTime, path,
                    FileTypeEnum.UWB_ALARM.getFileType(), item);
            pathList.add(filePath);
            SdkAnnex sdkAnnex = SdkAnnex.builder()
                    .devId(item).startTime(firstHalfMinute)
                    .endTime(endMinute).path(filePath).build();
            if (sendFlag) {
                //气泡框报警的时候不发送创建附件，报警结束后才创建
                baseMqPushUtil.sendTopicBytes(MqTopicAndTagConstants.SDK_FILE_SERVER_TOPIC,
                        MqTopicAndTagConstants.SDK_FILE_DOWNLOAD_TAG, JSON.toJSONBytes(sdkAnnex));
            }
        });
        if (!pathList.isEmpty()) {
            alarmReport.setFilePath(pathList.stream().collect(Collectors.joining(",")));
        }
    }

    /**
     * 文件创建
     * @param time
     * @param path
     * @param fileType
     * @param devId
     * @return
     */
    public static String filePath(Date time, String path, Integer fileType, Long devId){
        // 日期格式
        String date = DateUtils.dateToStr(DateUtils.TIME_STANDARD_FORMAT_YMD, time);
        // 文件存储路径
        String filePath = path;
        // 文件类型存储路径
        String fileTypePath = "/" + FileTypeEnum.getByValue(fileType) + "/"
                + date + "/" + devId + "/";
        File folder = new File(filePath + fileTypePath);
        if (!folder.exists()) {
            folder.mkdirs();
        }
        // 文件名
        String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ".mp4";
        return fileTypePath + fileName;
    }

    /**
     * 自定义文件格式
     * @param time 时间
     * @param path 全局存储文件前缀
     * @param fileType 文件夹类型
     * @param devId 设备ID
     * @param format 文件格式
     * @return
     */
    public static String filePathFormat(Date time, String path, Integer fileType,
                                        Long devId, String format){
        // 日期格式
        String date = DateUtils.dateToStr(DateUtils.TIME_STANDARD_FORMAT_YMD, time);
        // 文件存储路径
        String filePath = path;
        // 文件类型存储路径
        String fileTypePath = "/" + FileTypeEnum.getByValue(fileType) + "/"
                + date + "/" + devId + "/";
        File folder = new File(filePath + fileTypePath);
        if (!folder.exists()) {
            folder.mkdirs();
        }
        // 文件名
        String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(time) + format;
        return fileTypePath + fileName;
    }
}
